import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.List;

public class stream_kind {
    // 如果主函数里有什么关于IOException的异常处理，就会抛出
    public static void main(String[] args) throws IOException {
        // readAllBytes 读取所有的byte进行UTF-8转码，绝对路径的格式需要规范
        String contents = new String(Files.readAllBytes(Paths.get("D:\\java_learn/java_h/test.txt")), StandardCharsets.UTF_8);
        // 以非字母格式分开
        // 1.PN 非数字 2.PZ 非分隔符 3.PS 非符号
        List<String> words = Arrays.asList(contents.split("\\PL+"));
        long count = 0;
        // 使用循环进行计数
        for(String w :words) {
            if (w.length() > 12) count++;
        }
        System.out.println(count);

        // 记录时间比较两种线程格式

        long start1 = System.currentTimeMillis();
        // 使用普通流处理寻找符合条件的计数
        count = words.stream().filter(w -> w.length()>12).count();
        long end1 = System.currentTimeMillis();
        System.out.println(count);
        long time1 = end1 - start1;
        System.out.println("单线程所用的时间是" +  time1);


        long start2 = System.currentTimeMillis();
        // 使用多线程进行处理
        count = words.parallelStream().filter(w -> w.length()>12).count();
        long end2 = System.currentTimeMillis();
        System.out.println(count);
        long time2 = end2 - start2;
        System.out.println("多线程所用的时间是" +  time2);
    }
}
